package com.tydic;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegUtil {
	/**
	 * 作用查找字符串中所有的美元大括号的中间的字符
	 * @param value 字符串
	 * */
	public static List<String> findData(String value){
		/*匹配美元大括号的字符串*/
		String reg = "\\$\\{([^}]+)\\}"; 
		Pattern p = Pattern.compile(reg); 
		Matcher matcher = p.matcher( value ) ;  
		ArrayList<String>array = new ArrayList<String>();
		/*找出所有美元 大括号的字符串*/
		while(matcher.find()){
			String tempValue = matcher.group() ;
			/*取出大括号中间的字符*/
			tempValue = tempValue.substring( 2  , tempValue.length() -1) ;
			/*判断该字符是否已经查找到*/
			if(!array.contains(tempValue)){
				array.add( tempValue ) ; 
			}
		}
		return array;
	}
	
	/**
	 * 替换所以的美元字符串
	 * @param value 字符串
	 *        map 替换的值
	 *        noExistsReplace 是否全部替换
	 * */
	public static String replace(String value,Map<String,String> map , boolean noExistsReplace){
		for(Map.Entry<String,String> entry : map.entrySet()){
			String key = "\\$\\{" + entry.getKey() + "\\}";
			value = value.replaceAll(key, entry.getValue()) ;
		}
		
/*		if(noExistsReplace){
			List<String> datas = findData( value ) ; 
			Map<String,String> tempValue = new LinkedHashMap<String, String>();
			for(String data : datas){
				tempValue.put(data , "" ) ; 
			}
			return replace(value , tempValue, false ) ;
		}*/
		
		return value;
	}
	
	public static void main(String[] args){
		String value = "${zs}很好,${li}" ;
		List<String> datas = findData(value) ; 
		Map<String,String> map = new LinkedHashMap<String, String>();
		int idx = 1 ;
		for(String data : datas){
			map.put(data, "值" + ( ++idx ) ) ; 
		}
		map.remove("li");
		System.out.println( replace(value, map , true ) ) ;
	}
}
